﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BusinessLayer.Implementacion;
using BusinessLayer.Interfaces;
using EntityLayer;
using System.Configuration;
using System.IO;
namespace pryTransfinter.Alertas
{
    public partial class wucTransferenciaOFAC : System.Web.UI.UserControl
    {
        IFacadeGestionarTransferencia blGestionarTransferencia;
        IFacadeActualizarTransferencia blActualizarTransferencia; 
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.cargarGrillaOFAC();
                this.existenciaOFAC();
            }
        }

        private void existenciaOFAC()
        {
            if (grdTransferenciaOFAC.VisibleRowCount == 0)
            {

                lblmensOk.Text = "No existe ninguna transacción OFAC ";
                popupOK.ShowOnPageLoad = true;
            }
            else
            {
                lblmensOk.Text = "Existen " + grdTransferenciaOFAC.VisibleRowCount.ToString()+ " transacciones OFAC que se deben regularizar.";
                popupOK.ShowOnPageLoad = true;
            }
        }
        void cargarGrillaOFAC()
        {
            blGestionarTransferencia=new FacadeGestionarTransferencia_Imp();
            try
            {
                grdTransferenciaOFAC.DataSource = blGestionarTransferencia.listarTransferenciaOFAC();
                grdTransferenciaOFAC.DataBind();
            }
            catch (Exception)
            {
            }
        }
        protected void grdTransferenciaOFAC_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            this.cargarGrillaOFAC();
        }

        protected void grdTransferenciaOFAC_FocusedRowChanged(object sender, EventArgs e)
        {
            blGestionarTransferencia = new FacadeGestionarTransferencia_Imp();
            List<Globales.lista_TransferenciaReponsable> lista = new List<Globales.lista_TransferenciaReponsable>();
            string idOpcion = Convert.ToString(grdTransferenciaOFAC.GetRowValues(grdTransferenciaOFAC.FocusedRowIndex, "nroOperacion"));
            string idCliente = Convert.ToString(grdTransferenciaOFAC.GetRowValues(grdTransferenciaOFAC.FocusedRowIndex, "idcCliente"));
            List<TB_Cuenta_Cliente> listaCuentaCliente=new List<TB_Cuenta_Cliente>();
            listaCuentaCliente=blGestionarTransferencia.listaClientexID(idCliente);
            if (idOpcion != string.Empty)
            {
                lista = blGestionarTransferencia.listaVerificacion(idOpcion);
                if (lista.Count == 0)
                {
                    List<Globales.lista_TransferenciaReponsable> listaC = new List<Globales.lista_TransferenciaReponsable>();
                    listaC = blGestionarTransferencia.listaVerificacionC(idOpcion);
                    if (listaC.Count == 0)
                    {
                        return;
                    }
                    
                    txtOperacion.Text = listaC[0].nroOperacion;
                    txtCliente.Text = listaC[0].nomCliente;
                    txtNombre.Text = listaC[0].nomCliente;
                    cboMoneda.Value = listaC[0].moneda;
                    txtMonto.Text = listaC[0].monto.ToString();
                    txtBanco.Text = listaC[0].codigoBcoDestino;
                    txtCuentaBenificiario.Text = listaC[0].cuentaBeneficiario;
                    txtDireccion.Text = listaC[0].dirBeneficiario;
                    cboTipoCargo.Value = listaC[0].tipoCargo;
                    txtDetallePago.Text = listaC[0].detallePago;
                }
                else {
                    txtOperacion.Text = lista[0].nroOperacion;
                    txtCliente.Text = lista[0].nomCliente;
                    txtNombre.Text = lista[0].nomCliente;
                    cboMoneda.Value = lista[0].moneda;
                    txtMonto.Text = lista[0].monto.ToString();
                    txtBanco.Text = lista[0].codigoBcoDestino;
                    txtCuentaBenificiario.Text = lista[0].cuentaBeneficiario;
                    txtDireccion.Text = lista[0].dirBeneficiario;
                    cboTipoCargo.Value = lista[0].tipoCargo;
                    txtDetallePago.Text = lista[0].detallePago;
                }
               
                
            }
            if (idCliente!=string.Empty)
            {
                txtCuentaOrdenante.Text = listaCuentaCliente[0].nroCuenta;
            }
       
        }

        protected void btnRegularizar_Click(object sender, EventArgs e)
        {
            Session["id_ofac"] = "R";
            lblConfirmar.Text = "Desea regularizar la transacción seleccionada.";
            popupConfirmacionT.HeaderText = "Confirmación";
            popupConfirmacionT.ShowOnPageLoad = true;
        }

        protected void btnAlertas_Click(object sender, EventArgs e)
        {
            Session["id_ofac"] = "A";
            lblConfirmar.Text = "Está seguro de actualizar la transacción como OFAC Alertada.";
            popupConfirmacionT.HeaderText = "Confirmación";
            popupConfirmacionT.ShowOnPageLoad = true;
          
        }

        void generarTrama(string codigo)
        {blActualizarTransferencia= new FacadeActualizarTransferencia();
            blGestionarTransferencia = new FacadeGestionarTransferencia_Imp();
            string ruta = Server.MapPath(ConfigurationManager.AppSettings["RutaDat"]);
            List<Globales.lista_TransferenciaReponsable> lista = new List<Globales.lista_TransferenciaReponsable>();
            string a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s;
            int dat = 10000;
            int count = 0;
            try
            {
                lista = (List<Globales.lista_TransferenciaReponsable>)blGestionarTransferencia.listarTransferenciaEstado(codigo);
                string rutadat = Server.MapPath(ConfigurationManager.AppSettings["RutaDat"]);
                //string path = ruta + codigo + ".dat";
                string Filess = rutadat + "\\" + codigo + ".dat";


                a = "{1:F01BCPLPEPLAXXX0000000000}{2:I103" + lista[0].codigoCorresponsal + "XXXXN}{4:\n";
                b = ":20:" + lista[0].nroOperacion;
                c = ":23B:CRED\n";
                d = ":32A:" + lista[0].fecValor.ToString("yyyyMMdd").Substring(2, 6) + "" + lista[0].moneda.ToString() + "" + lista[0].monto.ToString().Replace(".", ",") + "\n";
                List<TB_Cuenta_Cliente> cliente = new List<TB_Cuenta_Cliente>();
                cliente = blGestionarTransferencia.listaClientexID(lista[0].idcCliente);
                e = ":50F:/" + cliente[0].nroCuenta.ToString().Replace("-", "") + "\n";
                f = "1/" + lista[0].nomCliente;
                g = "2/" + lista[0].dirCliente;
                h = "3/PE/SURCO LIMA";
                List<TB_Corresponsal> listacorresponsal = new List<TB_Corresponsal>();
                listacorresponsal = blGestionarTransferencia.listarCorrespansalxID(lista[0].codigoCorresponsal);
                j = ":53D:/" + listacorresponsal[0].ctaBanqueroCorresponsal;
                List<TB_BcoDestino> banco = new List<TB_BcoDestino>();
                IFacadeSolicitarTrasnferencia blSolicitarTransgferencia = new FacadeSolicitarTransferencia_Imp();
                banco = blSolicitarTransgferencia.getCodigoCorresponsal(lista[0].codigoBcoDestino);
                k = banco[0].nombreBcoDestibo;
                m = banco[0].ciudadBcoDestino + "," + banco[0].paisBcoDestino;
                n = ":57A:" + lista[0].codigoBcoDestino;
                o = ":59:/" + lista[0].cuentaBeneficiario;
                p = "" + lista[0].nomBeneficiario;
                q = "" + lista[0].dirBeneficiario;
                r = ":71A:" + lista[0].tipoCargo;
                s = "-}";
                using (FileStream fs = new FileStream(Filess, FileMode.Create, FileAccess.ReadWrite))
                {
                    fs.Close();
                }
                using (StreamWriter sw = new StreamWriter(Filess))
                {
                    sw.WriteLine(a);
                    sw.WriteLine(b);
                    sw.WriteLine(c);
                    sw.WriteLine(d);
                    sw.WriteLine(e);
                    sw.WriteLine(f);
                    sw.WriteLine(g);
                    sw.WriteLine(h);
                    // sw.WriteLine(i);
                    sw.WriteLine(j);
                    sw.WriteLine(k);
                    sw.WriteLine(m);
                    sw.WriteLine(n);
                    sw.WriteLine(o);
                    sw.WriteLine(p);
                    sw.WriteLine(q);
                    sw.WriteLine(r);
                    sw.WriteLine(s);
                    sw.Flush();
                    sw.Close();
                }
                //using (StreamWriter writer = new StreamWriter(
                //new FileStream(Filess, FileMode.Append, FileAccess.Write, FileShare.ReadWrite)))
                //{
                //    //writer.WriteLine(string.Format("{0} | {1} | {2} | {3}", DateTime.Now, e.Source, e.Message, e.InnerException));
                //    writer.WriteLine(a);

                //    writer.Flush();
                //    writer.Close();
                //}

                blGestionarTransferencia.actualizarEstado(codigo, "AUTORIZADA", null);

                   string nro = grdTransferenciaOFAC.GetRowValues(grdTransferenciaOFAC.FocusedRowIndex, "nroOperacion").ToString();
                            double montod = Convert.ToDouble(grdTransferenciaOFAC.GetRowValues(grdTransferenciaOFAC.FocusedRowIndex, "monto"));
                            string monedad =grdTransferenciaOFAC.GetRowValues(grdTransferenciaOFAC.FocusedRowIndex, "moneda").ToString();
                            string codigoCorresponsal = grdTransferenciaOFAC.GetRowValues(grdTransferenciaOFAC.FocusedRowIndex, "codigoCorresponsal").ToString();
                            string idcliente = Convert.ToString(grdTransferenciaOFAC.GetRowValues(grdTransferenciaOFAC.FocusedRowIndex, "idcCliente"));
                        List<TB_Cuenta_Cliente> listaCuentaCliente = new List<TB_Cuenta_Cliente>();
                        listaCuentaCliente = blGestionarTransferencia.listaClientexID(idcliente);
                        //; listaCuentaCliente[0].nroCuenta.ToString()
                        string nrocuenta = listaCuentaCliente[0].nroCuenta.ToString();
                 TB_CuentasAfectadas cuenta = new TB_CuentasAfectadas();
                         
                        List<TB_Corresponsal> ListarCuentaAbono = new List<TB_Corresponsal>();
                
                        ListarCuentaAbono = blActualizarTransferencia.ListarCuentaAbono(codigoCorresponsal);

                        List<TB_Cuenta_Cliente> ListarTipoMonedaCuenta = new List<TB_Cuenta_Cliente>();
                        ListarTipoMonedaCuenta = blActualizarTransferencia.ListarCuentaCliente(nrocuenta);

                        string monedacuenta = ListarTipoMonedaCuenta[0].TipoMoneda;
                        decimal saldo = Convert.ToDecimal(ListarTipoMonedaCuenta[0].saldoCuenta);
                        double tipocambio = 1;
                        double montoenviar = Convert.ToDouble(montod);
                        double montocomsision = 0;

                        if (montoenviar >= 0 && montoenviar <= 1000)
                        {
                            montocomsision = 18;
                        }

                        if (montoenviar >= 1001.00 && montoenviar <= 2500)
                        {
                            montocomsision = 25;
                        }

                        if (montoenviar >= 2501.00 && montoenviar <= 5000)
                        {
                            montocomsision = 35;
                        }

                        if (montoenviar >= 5001.00 && montoenviar <= 10000)
                        {
                            montocomsision = 70;
                        }

                        if (montoenviar >= 10001.00 && montoenviar <= 20000)
                        {
                            montocomsision = 120;
                        }
                        if (montoenviar >= 20001)
                        {
                            montocomsision = 150;
                        }

                        if (cboMoneda.Text.Trim().ToUpper() == "USD")
                        {
                            if (monedacuenta == "USD")
                            {
                                tipocambio = 1.0000;
                            }
                            if (monedacuenta == "PEN")
                            {
                                tipocambio = 2.7500;
                            }
                        }
                        if (cboMoneda.Text.Trim().ToUpper() == "EUR")
                        {
                            if (monedacuenta == "PEN")
                            {
                                tipocambio = 3.7529;
                            }
                        }

                        cuenta.nroOperacion = nro;
                        cuenta.moneda = monedad;
                        cuenta.ctaAbono = ListarCuentaAbono[0].ctaAbono;
                        cuenta.montoAbono = Convert.ToDecimal(montod);
                        cuenta.ctaComision = "522208000001";
                        cuenta.montoComision = Convert.ToDecimal(montocomsision);
                        cuenta.ctaDebito = nrocuenta;
                        cuenta.montoDebito = Convert.ToDecimal((montoenviar + montocomsision) * tipocambio);
                        cuenta.montoTRF = Convert.ToDecimal(montoenviar + montocomsision);
                        cuenta.tipoCambio = Convert.ToDecimal(tipocambio);
                        decimal saldofinal = 0;
                        saldofinal = saldo - Convert.ToDecimal((montoenviar + montocomsision) * tipocambio);
                        if (blActualizarTransferencia.InsertarCuentas(cuenta))
                        {
                            blActualizarTransferencia.ActualizarSaldoCliente(nrocuenta, saldofinal);
                        }
               
                 
                    lblmensOk.Text = "Se generó las tramas correspondientes de las transacciones numero. " + codigo;
                    popupOK.HeaderText = "Generación de trama";
                    popupOK.ShowOnPageLoad = true;
                
            }
            catch (Exception)
            {
            }
        }

    
        protected void btnAceptar_Click(object sender, EventArgs e)
        {
            string id_operacion= (string)Session["id_ofac"];
            if (id_operacion=="R")
            {
 blGestionarTransferencia = new FacadeGestionarTransferencia_Imp();
 if (blGestionarTransferencia.actualizarEstado(grdTransferenciaOFAC.GetRowValues(grdTransferenciaOFAC.FocusedRowIndex, "nroOperacion").ToString(), "AUTORIZADA", null))
            {

                this.generarTrama(grdTransferenciaOFAC.GetRowValues(grdTransferenciaOFAC.FocusedRowIndex, "nroOperacion").ToString());
                lblmensOk.Text = "El número de transacción se regularizo. ";
                popupOK.ShowOnPageLoad = true;
                this.cargarGrillaOFAC();

            }
            else
            {
                lblmensOk.Text = "Error al regularizar la transacción. ";
                popupOK.ShowOnPageLoad = true;

            }
            }
            else if (id_operacion=="A")
            {
                if (Convert.ToString(grdTransferenciaOFAC.GetRowValues(grdTransferenciaOFAC.FocusedRowIndex, "codigoOFAC")) != null)
                {
                    blGestionarTransferencia = new FacadeGestionarTransferencia_Imp();

                    if (blGestionarTransferencia.actualizarEstado(grdTransferenciaOFAC.GetRowValues(grdTransferenciaOFAC.FocusedRowIndex, "nroOperacion").ToString(), "OFAC", null))
                    {
                        lblmensOk.Text = "El numero de transacción se encuentra como OFAC Alertada";
                        popupOK.ShowOnPageLoad = true;
                        this.cargarGrillaOFAC();
                        return; 
                    }
                    else
                    {
                        lblmensOk.Text = "Error al actualizar la transacción OFAC";
                        popupOK.ShowOnPageLoad = true;
                        return;
                    }
                }
            }

            this.cargarGrillaOFAC();
        }
    }
}